import axios from 'axios';
import store from '@/store';

import { logout } from '@/store/actions'
import { customHistory } from './history';

import  {message} from 'antd'

import  {baseURL }  from './baseUrl'

const http = axios.create({
  baseURL: baseURL,
  timeout: 5000,
});

// 12-统一添加token
// 目标：能够通过拦截器统一添加token
// 分析说明：
// 因为不管是登录时，还是每次刷新页面时，已经将 token 存储在 redux 中了，
// 所以，可以直接通过 store.getState() 来获取到 redux 状态
// 步骤：
// 导入 store
// 判断是否是登录请求
// 如果是，不做任何处理
// 如果不是，统一添加 Authorization 请求头

// 统一添加token在请求头
http.interceptors.request.use(
  (config) => {
    const state = store.getState();
    //   如果有token  那么统一加上token
    if (state.user.token) {
      config.headers.Authorization = `Bearer ${state.user.token}`;
      return config;
    } else {
      //    如果没有 那么是token 接口 直接返回
      return config;
    }
  },
  (e) => {}
);

http.interceptors.response.use(
  (res) => {
    return res?.data?.data || res;
  },
  (err) => {
    console.log('xxxxx')
   if(err.response.status===401) {
    message.error('登录失效')
    store.dispatch(logout())

     // 防止跳转login的时候接口才处理401
       if(customHistory.location.pathname!=='/login') {
          customHistory.push({
             pathname:'/login',
             state:{ returnUrl:customHistory.location.pathname  }
          })
       }
   }

   Promise.reject(err);
  });

export { http };
